<?php

/**
 * @author Grover Campos
 * @version 1.0
 * @created 03-ago-2009 06:43:07 p.m.
 */
class Gtux_Model_Gateway_User extends Gtux_Model_Gateway_Abstract 
{

  /**
   * Devuelve la tabla
   *
   * @return Gtux_Model_Table_User
   */
  public function getDbTable()
  {
    if (null == $this->_dbTable) 
    {
      $this->setDbTable('Gtux_Model_Table_User');
    }
    return $this->_dbTable;
  }

  /**
   * 
   * @param Gtux_Model_User $usuario
   * @return int
   */
  public function delete(Gtux_Model_Abstract $usuario)
  {
    $where = $this->getDbTable()
                  ->getAdapter()
                  ->quoteInto('id_user = ?', $usuario->getIdUser());
    return $this->getDbTable()->delete($where);
  }

  public function fetchAll()
  {
    $rs      = $this->getDbTable()->fetchAll();
    $entries = array();
    foreach ($rs as $row) 
    {
      $entries[] = new Gtux_Model_User(null, $row);
    }
    return $entries;
  }

  /**
   * 
   * @param Gtux_Model_User $usuario
   * @return int
   */
  public function insert(Gtux_Model_Abstract $usuario)
  {
    $data = array(
      'username'      => $usuario->getUsername(),
      'nombre'        => $usuario->getNombre(),
      'apellido'      => $usuario->getApellido(),
      'password'      => $usuario->getPassword(),
      'created_at'    => $usuario->getCreatedAt()->toString(Zend_Date::ISO_8601)
    );
    $id = $usuario->getIdUser();
    if (null == $id) 
    {
      return $this->getDbTable()->insert($data);
    }
  	return false;
  }

  /**
   * Actualiza la data del objeto Usuario
   *
   * @param Gtux_Model_User $usuario
   * @return int
   */
  public function update(Gtux_Model_Abstract $usuario)
  {
    $data = array();
    if (strlen($usuario->getUsername())>0) 
    {
    	$data['username'] = $usuario->getUsername();
    }
    if (strlen($usuario->getNombre())>0) 
    {
    	$data['nombre'] = $usuario->getNombre();
    }
    if (strlen($usuario->getApellido())>0) 
    {
    	$data['apellido'] = $usuario->getApellido();
    }
    if (strlen($usuario->getPassword())>0) 
    {
    	$data['password'] = $usuario->getPassword();
    }
    $id = $usuario->getIdUser();
    if (null !== $id && sizeof($data)>0)
    {
      $where = $this->getDbTable()
                    ->getAdapter()
                    ->quoteInto('id_user = ?', $usuario->getIdUser());
                    
      return $this->getDbTable()->update($data, $where);
    }
    return false;
  }

  /**
   * @see Gtux_Model_Gateway_Abstract::save()
   *
   * @param Gtux_Model_Abstract $model
   */
  public function save(Gtux_Model_Abstract $user)
  {
    $id = $user->getIdUser();
    if (NULL == $id) 
    {
    	return $this->insert($user);
    }
    else 
    {
    	return $this->update($user);
    }    
  }

  /**
   * Busca un Usuario a partir del username
   * 
   * @param string $username
   * @param Gtux_Model_User $usuario
   * @return Gtux_Model_User
   */
  public function findByUsername($username, Gtux_Model_User $usuario) 
  {
    $select = $this->getDbTable()->select()
                                 ->where('username LIKE ?', $username);
    $row    = $this->getDbTable()->fetchRow($select);
    return $usuario->setFromRow($row);
  }
}
?>